//
// service_UNIX.cpp
// libprotea
// Tools Library for the Protea Project / Service/Daemon functionality, specific to UNIX
// Copyright (C) 2003, 2004, 2005 eXegeSys, Inc.
// Copyright (C) 2008 Bruce A. James
//
// This program is part of the Protea Project.
//
// The Protea Project is free software; you can redistribute it and/or modify it 
// under the terms of the GNU General Public License as published by the 
// Free Software Foundation, either version 3 of the License, or (at your 
// option) any later version.
//
// The Protea Project is distributed in the hope that it will be useful, but 
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
// for more details.
// 
// You should have received a copy of the GNU General Public License along 
// with this program.  If not, see <http://www.gnu.org/licenses/>.
// 
// Please send correspondence to:
// 
// theproteaproject@gmail.com
//

#include "../OS_defines.h"
#ifdef OS_UNIX

#include "../defines.h"
#include "../AppHandler/AppInterface.h"

#include "service.h"
#include <iostream>

//#include "service_msg.h"

///////////////////////////////////////////////////////////////////////////////////
//
// XCService
//
///////////////////////////////////////////////////////////////////////////////////
XCService::XCService( char* sName, char* DispName, char* Description, void* ctrlfunc, char* Dependencies ) {
	name = sName;
	dispname = DispName;
	description = Description;
	dependencies = Dependencies;
	main = ctrlfunc;
};
	
//
// Service::Install
//
//	Installs service into service control manager and sets descriptions
//
bool XCService::Install() {
	cout << "Install not valid on non-Windows platforms" << endl;
	return false;
};

bool XCService::Uninstall() {
	cout << "Install not valid on non-Windows platforms" << endl;
	return false;
};

void XCService::Run( bool as_service ) {
	// Call the init event
	OnInit();

	// Start the service
	OnRun();

	// Stop the service
	OnCleanup();
};

///////////////////////////////////////////////////////////////////////////////////
//
// XCServiceDispatcher
//
///////////////////////////////////////////////////////////////////////////////////
bool XCServiceDispatcher::StartRemoteService( const char* machine, const char* name ) {
	return false;
};

bool XCServiceDispatcher::Register() {
	XCService* temp = service_list;

	while (temp) {
		temp->Run( service_state );
		temp = temp->next;
	};

	return true;
};

#endif // OS_UNIX
